$(document).ready(function()
{
	// Função que adiciona uma regra de expressão regular à um elemento
	function addRegexRule(elem, regex, msg)
	{
		if ($(elem).length)
			$(elem).each(function()
			{
				$(this).rules('add',
				{
					regex: regex,
					messages: { regex: msg }
				});
			});
	}
	
	// Função que adiciona uma regra de igualdade à um campo
	function addEqualRule(elem, to)
	{
		if ($(elem).length)
			$(elem).each(function()
			{
				$(this).rules('add',
				{
					equalTo: to
				});
			});
	}
	
	// Ação do formulário
	$('form.ajax').submit(function(e)
	{
		e.preventDefault();
	
		if ($(this).valid())
			$.ajax(
			{
		        type     : "POST",
		        cache    : false,
		        url      : $(this).attr('action'),
		        data     : $(this).serialize(),
		        success  : function(data) 
		        {
		        	$('.tooltip').remove();
		            $('#content').empty().append(data);
		        }
		    });
	});
	
	// Ação do formulário
	$('form.full_ajax').submit(function(e)
	{
		e.preventDefault();
	
		if ($(this).valid())
			$.ajax(
			{
		        type     : "POST",
		        cache    : false,
		        url      : $(this).attr('action'),
		        data     : $(this).serialize(),
		        success  : function(data) 
		        {
		        	$('.tooltip').remove();
		        	$('#main').empty().append(data);
		        }
		    });
	});
	
	// Adiciona um método de validação
	$.validator.addMethod(
	    "regex",
	    function(value, element, regexp) 
	    {
	    	var re = new RegExp(regexp);
	        return this.optional(element) || re.test(value);
	    },
	    "Please enter a valid input."
	);
	
	// Inicia a validação
	$('form').validate();
	
	$.extend($.validator.messages, 
	{
	    required: "Este campo é obrigatório",
	    equalTo: "Digite o mesmo valor",
	});
	
	// Validação de e-mail
	addRegexRule('.remail', /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/,
			"Digite um e-mail válido");
	
	// Validação de senha
	addRegexRule('.password', /^((?=.*\d)(?=.*[a-zA-Z]).{5,})$/,
			"Digite uma senha válida");
	
	// Validação de igualdade a um e-mail
	addEqualRule('.equalToEmail', '#email');
	
	// Validação de igualdade a uma senha
	addEqualRule('.equalToPassword', '#password');
	
	// Validação de nome
	addRegexRule('.name', /^[a-z\u00C0-\u00ff A-Z.-]+$/,
			"Digite um nome válido");
	
	// Validação de data
	addRegexRule('.rdate', /^\d{2}\/\d{2}\/\d{4}$/,
			"Digite uma data válida");
	
	// Validação de CPF
	addRegexRule('.cpf', /^\d{3}\.\d{3}\.\d{3}\-\d{2}$/,
			"Digite um CPF válido");
	
	// Validação de RG
	addRegexRule('.rg', /^[\d\.\-]+$/,
			"Digite um RG válido");
	
	// Validação de endereço
	addRegexRule('.address', /^[a-z\u00C0-\u00ff 0-9A-Z.,-]+$/,
			"Digite um endereço válido");

	// Validação de CEP
	addRegexRule('.cep', /^\d{2}\.\d{3}\-\d{3}$/,
			"Digite um CEP válido");

	// Validação de telefone
	addRegexRule('.phone', /^\(\d{2}\)\d?\d{4}\-\d{4}$/,
			"Digite um telefone válido");
	
	// Validação de número
	addRegexRule('.rdigits', /^\d+$/,
			"Digite um número válido");
	
	// Validação de ISSN
	addRegexRule('.issn', /^\d{4}\-\d{3}[\dX]$/,
			"Digite um ISSN válido");
	
	// Validação de ISBN
	addRegexRule('.isbn', /^\d{3}\-\d\-\d{2}\-\d{6}\-\d$/,
			"Digite um ISBN válido");

});
